{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "initial_id",
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    ""
   ]
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 1、使用FUNCTION_CALL模式",
   "id": "e7a76e20beb4c628"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-30T07:49:38.574979Z",
     "start_time": "2025-09-30T07:49:32.602975Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "from langchain_core.prompts import ChatPromptTemplate, PromptTemplate\n",
    "# 获取Tavily搜索的实例\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain.agents import initialize_agent, AgentType, create_tool_calling_agent, AgentExecutor\n",
    "from langchain.tools import Tool\n",
    "import os\n",
    "import dotenv\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain_community.tools.tavily_search import TavilySearchResults\n",
    "dotenv.load_dotenv()\n",
    "\n",
    "# 读取配置文件的信息\n",
    "os.environ['TAVILY_API_KEY'] = \"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\"\n",
    "\n",
    "# 获取Tavily搜索工具的实例\n",
    "search = TavilySearchResults(max_results=3)\n",
    "\n",
    "# 获取一个搜索的工具\n",
    "# 使用Tool\n",
    "search_tool = Tool(\n",
    "    func=search.run,\n",
    "    name=\"Search\",\n",
    "    description=\"用于检索互联网上的信息\",\n",
    ")\n",
    "\n",
    "\n",
    "# 获取大语言模型\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY1\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "llm = ChatOpenAI(\n",
    "    model=\"gpt-4o-mini\",\n",
    "    temperature=0,\n",
    ")\n",
    "# 提供提示词模板（以ChatPromptTemplate为例）\n",
    "prompt_template = ChatPromptTemplate.from_messages([\n",
    "    (\"system\",\"你是一个乐于助人的ai助手，根据用户的提问，必要时调用Search工具，使用互联网检索数据\"),\n",
    "    (\"human\",\"{input}\"),\n",
    "    # (\"system\",\"{agent_scratchpad}\"),\n",
    "    (\"placeholder\",\"{agent_scratchpad}\")\n",
    "])\n",
    "\n",
    "# 获取Agent的实例：create_tool_calling_agent()\n",
    "agent = create_tool_calling_agent(\n",
    "    llm=llm,\n",
    "    prompt=prompt_template,\n",
    "    tools=[search_tool]\n",
    ")\n",
    "\n",
    "# 获取AgentExecutor的实例\n",
    "agent_executor = AgentExecutor(\n",
    "    agent=agent,\n",
    "    tools=[search_tool],\n",
    "    verbose=True,\n",
    ")\n",
    "\n",
    "# 通过AgentExecutor的实例调用invoke(),得到响应\n",
    "result = agent_executor.invoke({\"input\":\"查询今天北京的天气情况\"})\n",
    "# result = agent_executor.invoke(\"查询今天北京的天气情况\")   #无法调用\n",
    "\n",
    "# 处理响应\n",
    "print(result)"
   ],
   "id": "6a8fb1f6948e70bb",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n",
      "\u001B[32;1m\u001B[1;3m\n",
      "Invoking: `Search` with `北京天气情况 2023年10月10日`\n",
      "\n",
      "\n",
      "\u001B[0m\u001B[36;1m\u001B[1;3m[{'title': '北京历史天气预报2023年10月份', 'url': 'https://www.tianqihoubao.com/lishi/beijing/month/202310.html', 'content': '| 2023年10月08日 | 小雨 / 晴 | 22℃ / 12℃ | 北风 1-3级 / 西北风 1-3级 |\\n| 2023年10月09日 | 晴 / 晴 | 24℃ / 10℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月10日 | 多云 / 多云 | 22℃ / 10℃ | 北风 1-3级 / 西南风 1-3级 |\\n | | | | | | |\\n| 2023年10月11日 | 晴 / 小雨 | 23℃ / 12℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月12日 | 小雨 / 小雨 | 18℃ / 11℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月13日 | 小雨 / 晴 | 21℃ / 9℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月14日 | 晴 / 晴 | 24℃ / 10℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月15日 | 晴 / 晴 | 23℃ / 7℃ | 无持续风向 1-3级 / 无持续风向 1-3级 | [...] 前一月 后一月 北京历史天气 北京10月份天气统计信息  \\n 搜索\"城市名+天气后报\"访问本站（北京天气后报）导出Excel\\n\\n### 天气状况统计\\n\\n2023年10月份北京北京天气状况统计图\\n白天天气\\n夜间天气\\n全天综合\\n\\n## 其他月份\\n\\n### 风力分布分析\\n\\n2023年10月份北京风力等级和风向分布情况图 \\n白天风力风向\\n夜间风力风向\\n全天综合\\n\\n### 关于天气后报\\n\\n天气后报提供全国34个省市所属的3146个地区的历史天气预报查询，数据来源于城市当天的天气预报信息，可以查询到历史天气气温，历史风向，历史风力等历史天气状况。\\n\\n### 快速链接\\n\\n### 联系我们\\n\\n关于我们 | 免责声明 | QQ : 1968509554 |\\n\\n版权所有 © 2012-2025 天气后报 [...] # 北京历史天气预报 2023年10月份\\n\\n### 温度趋势分析\\n\\n2023年10月份北京市每日最高气温和最低气温变化趋势图', 'score': 0.8646883}, {'title': '北京市10月的天氣和平均溫度（中國） - Weather Spark', 'url': 'https://tw.weatherspark.com/m/131055/10/%E5%8C%97%E4%BA%AC%E3%80%81%E4%B8%AD%E5%9C%8B%E7%9A%8410%E6%9C%88%E5%B9%B3%E5%9D%87%E5%A4%A9%E6%B0%A3', 'content': '| 春季夏季秋季冬季  1月2月3月4月5月6月7月8月9月10月11月12月  12345678910111213141516171819202122232425262728293031 北京市10月的天氣 中國 每日高溫下降 8°C，從 23°C 變爲 15°C，極少低於 9°C 或高於 27°C。  每日低溫下降 8°C，從 12°C 變爲 4°C，極少低於 0°C 或高於 16°C。  作爲參考，北京市一年中最熱的一天——7月16日的溫度一般在 23°C 至 31°C 的範圍内，而一年中最冷的一天——1月11日的溫度一般在 -8°C 至 1°C 的範圍内。  北京市 10月平均高溫和低溫 秋季  連結  下載  比較  平均值：12345678910月1112  歷史：2024年2023年2022年2021年2020年  有 25% 至 75% 以及 10% 至 90% 百分位帶的日均高溫（紅線）和低溫（藍線）。 細點線為對應的平均感知溫度。  下圖向您展示了以 10月爲中心的該季度每小時平均溫度的緊凑表徵分析。 [...] 北京市 10月的平均滑動 31 天雨量減少，月初為 30 公釐，極少高於 60 公釐 或低於 6 公釐；月末為 12 公釐，極少高於 27 公釐 或低於 1 公釐。  10月北京市的月平均雨量 秋季  連結  下載  比較  平均值：12345678910月1112  歷史：2024年2023年2022年2021年2020年  有 25% 至 75% 以及 10% 至 90% 百分位帶的以關注當天為中心的 31 天滑動期間的纍計平均雨量（實線）。 細點線為對應的平均雪量。  太陽  整個 10月，北京市白天的長度快速縮短。 從月初到月底，白天的長度減少 1 小時 15 分鐘，表示平均每天減少 2 分鐘 30 秒，平均每周減少 17 分鐘 31 秒。  該月最短的一天是 10月31日，有 10 小時 32 分鐘的日照；最長的一天是 10月1日，有 11 小時 47 分鐘的日照。  北京市 10月的日照和曙暮光小時數 秋季  連結  下載  比較  平均值：12345678910月1112  歷史：2024年2023年2022年2021年2020年  太陽可見的小時數（黑線）。 [...] 10月給定的一天天氣悶熱的機率逐漸減少，全月從 2% 降至 0%。  作爲參考，7月29日是一年中最悶熱的一天，出現悶熱天氣的機率為 88%，而 1月1日是一年中最不悶熱的一天，出現悶熱天氣的機率為 0%。  北京市 10月的濕度舒適等級 秋季  連結  下載  比較  平均值：12345678910月1112  歷史：2024年2023年2022年2021年2020年  乾燥   13°C   舒適   16°C   潮濕   18°C   悶熱   21°C   沈悶   24°C   令人難受  按露點分類的不同濕度舒適等級的時間百分比。  風  此節討論的是地面以上 10 公尺處的廣域平均每小時風向量（速度和方向）。 任意給定地點的風很大程度上取決於本地地形和其他因素，並且瞬時風速和方向比每小時平均值變化要大得多。  北京市 10月的每小時平均風速基本不變，全月保持在 每小時 10.9 公里 的 每小時 0.3 公里 範圍内。  作爲參考，4月20日是全年風最大的一天，日均風速為 每小時 14.6 公里，而 8月16日是全年最無風的一天，日均風速為 每小時 8.5 公里。', 'score': 0.69498676}, {'title': '北京市10月的天氣和平均溫度（中國）', 'url': 'https://tw.weatherspark.com/m/131055/10/北京、中國的10月平均天氣', 'content': '| 春季夏季秋季冬季  1月2月3月4月5月6月7月8月9月10月11月12月  12345678910111213141516171819202122232425262728293031 北京市10月的天氣 中國 每日高溫下降 8°C，從 23°C 變爲 15°C，極少低於 9°C 或高於 27°C。  每日低溫下降 8°C，從 12°C 變爲 4°C，極少低於 0°C 或高於 16°C。  作爲參考，北京市一年中最熱的一天——7月16日的溫度一般在 23°C 至 31°C 的範圍内，而一年中最冷的一天——1月11日的溫度一般在 -8°C 至 1°C 的範圍内。  北京市 10月平均高溫和低溫 秋季  連結  下載  比較  平均值：12345678910月1112  歷史：2024年2023年2022年2021年2020年  有 25% 至 75% 以及 10% 至 90% 百分位帶的日均高溫（紅線）和低溫（藍線）。 細點線為對應的平均感知溫度。  下圖向您展示了以 10月爲中心的該季度每小時平均溫度的緊凑表徵分析。 [...] 北京市 10月的平均滑動 31 天雨量減少，月初為 30 公釐，極少高於 60 公釐 或低於 6 公釐；月末為 12 公釐，極少高於 27 公釐 或低於 1 公釐。  10月北京市的月平均雨量 秋季  連結  下載  比較  平均值：12345678910月1112  歷史：2024年2023年2022年2021年2020年  有 25% 至 75% 以及 10% 至 90% 百分位帶的以關注當天為中心的 31 天滑動期間的纍計平均雨量（實線）。 細點線為對應的平均雪量。  太陽  整個 10月，北京市白天的長度快速縮短。 從月初到月底，白天的長度減少 1 小時 15 分鐘，表示平均每天減少 2 分鐘 30 秒，平均每周減少 17 分鐘 31 秒。  該月最短的一天是 10月31日，有 10 小時 32 分鐘的日照；最長的一天是 10月1日，有 11 小時 47 分鐘的日照。  北京市 10月的日照和曙暮光小時數 秋季  連結  下載  比較  平均值：12345678910月1112  歷史：2024年2023年2022年2021年2020年  太陽可見的小時數（黑線）。 [...] 10月給定的一天天氣悶熱的機率逐漸減少，全月從 2% 降至 0%。  作爲參考，7月29日是一年中最悶熱的一天，出現悶熱天氣的機率為 88%，而 1月1日是一年中最不悶熱的一天，出現悶熱天氣的機率為 0%。  北京市 10月的濕度舒適等級 秋季  連結  下載  比較  平均值：12345678910月1112  歷史：2024年2023年2022年2021年2020年  乾燥   13°C   舒適   16°C   潮濕   18°C   悶熱   21°C   沈悶   24°C   令人難受  按露點分類的不同濕度舒適等級的時間百分比。  風  此節討論的是地面以上 10 公尺處的廣域平均每小時風向量（速度和方向）。 任意給定地點的風很大程度上取決於本地地形和其他因素，並且瞬時風速和方向比每小時平均值變化要大得多。  北京市 10月的每小時平均風速基本不變，全月保持在 每小時 10.9 公里 的 每小時 0.3 公里 範圍内。  作爲參考，4月20日是全年風最大的一天，日均風速為 每小時 14.6 公里，而 8月16日是全年最無風的一天，日均風速為 每小時 8.5 公里。', 'score': 0.6862234}]\u001B[0m\u001B[32;1m\u001B[1;3m今天（2023年10月10日）北京的天气情况如下：\n",
      "\n",
      "- **天气**：多云\n",
      "- **白天气温**：最高约22°C\n",
      "- **夜间气温**：最低约10°C\n",
      "- **风速**：北风1-3级，夜间转为西南风1-3级\n",
      "\n",
      "整体来看，今天的天气比较适宜，适合外出活动。\u001B[0m\n",
      "\n",
      "\u001B[1m> Finished chain.\u001B[0m\n",
      "{'input': '查询今天北京的天气情况', 'output': '今天（2023年10月10日）北京的天气情况如下：\\n\\n- **天气**：多云\\n- **白天气温**：最高约22°C\\n- **夜间气温**：最低约10°C\\n- **风速**：北风1-3级，夜间转为西南风1-3级\\n\\n整体来看，今天的天气比较适宜，适合外出活动。'}\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "注意：agent_scratchpad必须声明，它用于存储和传递Agent的思考过程。比如，在调用链式工具时（如先搜索天气再推荐行程），`agent_scratchpad` 保留所有历史步骤，避免上下文丢失。format方法会将intermediate_steps转换为特定格式的字符串，并赋值给agent_scratchpad变量。如果不传递intermediate_steps参数，会导致KeyError: 'intermediate_steps'错误。",
   "id": "83bb22e41740d601"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# 2、使用ReAct模式\n",
    "\n",
    "举例1：使用PromptTemplate实现"
   ],
   "id": "72725428d9a93e8d"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-30T07:56:11.124061Z",
     "start_time": "2025-09-30T07:56:02.420724Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "from langchain.agents import create_react_agent\n",
    "from langchain_core.prompts import ChatPromptTemplate\n",
    "# 获取Tavily搜索的实例\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain.agents import initialize_agent, AgentType, create_tool_calling_agent, AgentExecutor\n",
    "from langchain.tools import Tool\n",
    "import os\n",
    "import dotenv\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain_community.tools.tavily_search import TavilySearchResults\n",
    "dotenv.load_dotenv()\n",
    "\n",
    "# 读取配置文件的信息\n",
    "os.environ['TAVILY_API_KEY'] = \"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\"\n",
    "\n",
    "# 获取Tavily搜索工具的实例\n",
    "search = TavilySearchResults(max_results=3)\n",
    "\n",
    "# 获取一个搜索的工具\n",
    "# 使用Tool\n",
    "search_tool = Tool(\n",
    "    func=search.run,\n",
    "    name=\"Search\",\n",
    "    description=\"用于检索互联网上的信息\",\n",
    ")\n",
    "\n",
    "\n",
    "# 获取大语言模型\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY1\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "llm = ChatOpenAI(\n",
    "    model=\"gpt-4o-mini\",\n",
    "    temperature=0,\n",
    ")\n",
    "# 提供提示词模板（以PromptTemplate为例）\n",
    "template = \"\"\"\n",
    "Answer the following questions as best you can. You have access to the following tools:\n",
    "\n",
    "{tools}\n",
    "\n",
    "Use the following format:\n",
    "\n",
    "Question: the input question you must answer\n",
    "Thought: you should always think about what to do\n",
    "Action: the action to take, should be one of [{tool_names}]\n",
    "Action Input: the input to the action\n",
    "Observation: the result of the action\n",
    "... (this Thought/Action/Action Input/Observation can repeat N times)\n",
    "Thought: I now know the final answer\n",
    "Final Answer: the final answer to the original input question\n",
    "\n",
    "Begin!\n",
    "\n",
    "Question: {input}\n",
    "Thought:{agent_scratchpad}\"\"\"\n",
    "prompt_template = PromptTemplate.from_template(\n",
    "    template=template,\n",
    ")\n",
    "\n",
    "# 获取Agent的实例：create_react_agent()\n",
    "agent = create_react_agent(\n",
    "    llm=llm,\n",
    "    prompt=prompt_template,\n",
    "    tools=[search_tool]\n",
    ")\n",
    "\n",
    "# 获取AgentExecutor的实例\n",
    "agent_executor = AgentExecutor(\n",
    "    agent=agent,\n",
    "    tools=[search_tool],\n",
    "    verbose=True,\n",
    ")\n",
    "\n",
    "\n",
    "# 通过AgentExecutor的实例调用invoke(),得到响应\n",
    "result = agent_executor.invoke({\"input\":\"查询今天北京的天气情况\"})\n",
    "\n",
    "# 处理响应\n",
    "print(result)"
   ],
   "id": "bd1748e06495b407",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n",
      "\u001B[32;1m\u001B[1;3m我需要查找今天北京的天气情况。  \n",
      "Action: Search  \n",
      "Action Input: '北京天气情况 2023年10月5日'  \u001B[0m\u001B[36;1m\u001B[1;3m[{'title': '北京历史天气预报2023年10月份', 'url': 'https://www.tianqihoubao.com/lishi/beijing/month/202310.html', 'content': '| 日期 | 天气状况(白天/夜间) | 最高/最低气温 | 风力风向(白天/夜间) |\\n ---  --- |\\n| 2023年10月01日 | 晴 / 晴 | 26℃ / 12℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月02日 | 多云 / 多云 | 25℃ / 14℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月03日 | 多云 / 多云 | 25℃ / 15℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月04日 | 晴 / 晴 | 24℃ / 9℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月05日 | 多云 / 多云 | 22℃ / 12℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月06日 | 多云 / 多云 | 22℃ / 12℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月07日 | 多云 / 小雨 | 22℃ / 11℃ | 北风 1-3级 / 北风 1-3级 | [...] 前一月 后一月 北京历史天气 北京10月份天气统计信息  \\n 搜索\"城市名+天气后报\"访问本站（北京天气后报）导出Excel\\n\\n### 天气状况统计\\n\\n2023年10月份北京北京天气状况统计图\\n白天天气\\n夜间天气\\n全天综合\\n\\n## 其他月份\\n\\n### 风力分布分析\\n\\n2023年10月份北京风力等级和风向分布情况图 \\n白天风力风向\\n夜间风力风向\\n全天综合\\n\\n### 关于天气后报\\n\\n天气后报提供全国34个省市所属的3146个地区的历史天气预报查询，数据来源于城市当天的天气预报信息，可以查询到历史天气气温，历史风向，历史风力等历史天气状况。\\n\\n### 快速链接\\n\\n### 联系我们\\n\\n关于我们 | 免责声明 | QQ : 1968509554 |\\n\\n版权所有 © 2012-2025 天气后报 [...] # 北京历史天气预报 2023年10月份\\n\\n### 温度趋势分析\\n\\n2023年10月份北京市每日最高气温和最低气温变化趋势图', 'score': 0.818055}, {'title': '北京市2023年的天氣歷史中國', 'url': 'https://tw.weatherspark.com/h/y/131055/2023/%E5%8C%97%E4%BA%AC%E5%B8%82%E3%80%81%E4%B8%AD%E5%9C%8B2023%E5%B9%B4%E6%AD%B7%E5%8F%B2%E5%A4%A9%E6%B0%A3', 'content': '0 公里/小時 無風   2 公里/小時 軟風   6 公里/小時 輕風   13 公里/小時 微風   21 公里/小時 和風   29 公里/小時 清風   40 公里/小時 強風   50 公里/小時 疾風   63 公里/小時 大風   76 公里/小時 烈風   89 公里/小時 風暴   103 公里/小時 暴風   117 公里/小時 颶風級  按蒲福氏風級進行色彩編碼成帶的每小時報告風速。 陰影叠加表示夜晚和民用曙暮光。  北京市 2023年 每小時風向 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    無風北東南西  按羅盤方位點進行色彩編碼的每小時報告風速。 陰影叠加表示夜晚和民用曙暮光。  北京市 2023年 氣壓 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    按照例如 METAR 報告中的高度計設定測量的每日氣壓（灰色長條）。 資料來源 [...] | 北京市2023年的天氣歷史 中國 此報告的資料來自北京首都国际机场。 檢視所有附近的氣象站  此報告顯示了北京市的過去天氣，並提供了2023年的天氣歷史。 它突出了我們的所有可用歷史天氣資料系列，包含北京市2023年的溫度歷史。 您可以透過點選圖表，從年份進一步檢視特定月份，甚至特定的一天的報告。  北京市2023年的溫度歷史 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    每日報告溫度範圍（灰色長條）和 24 小時高溫（紅色刻點）和低溫（藍色刻點），置於日均高溫（淺紅線）和低溫（淺藍線）上方，有 25%-75% 和 10%-90% 百分位帶。  北京市 2023年 每小時溫度 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    嚴寒   -9°C 極冷   0°C 寒冷   7°C 冷   13°C 涼爽   18°C 舒適   24°C 溫暖   29°C 熱   35°C 酷熱 [...] 每小時報告的溫度，以色彩編碼成帶。 陰影叠加表示夜晚和民用曙暮光。  © OpenStreetMap contributors  將北京市與另一個城市相比較：  北京市 2023年 雲量 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    0% 晴   20% 晴時多雲   40% 多雲   60% 多雲時陰   80% 陰天   100%  無顯著性云未偵測到雲雲幕及能見度良好  每小時報告的雲量，按天空的雲覆蓋百分比分類。    北京市 2023年 觀測天氣 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    霧霾毛毛雨小雨中雨大雨凍雨霰雪粒微雪中雪大雪雹雷雨  按類別進行色彩編碼的每小時觀測天氣（按嚴重程度排序）。 若有多項報告則顯示最嚴重的代碼。  北京市 2023年 的日照和曙暮光小時數 連結  下載  比較  平均值', 'score': 0.61307496}, {'title': '北京2023年10月下旬气温比历史同期偏高3.4', 'url': 'http://www.bj.news.cn/20231102/bfb58c5e807a45d98e92bd1c3adfb5cf/c.html', 'content': '进入11月以后，影响我国的冷空气将会日渐频繁，而冷空气已经在路上，冷暖大反转即将上演。未来一周，将有两股冷空气轮番来袭，我国大部将开启“换季式”降温。\\n\\n\\u2003\\u2003从本周五开始，北京气温将逐渐下滑。今天的最高气温预计22℃，周五就将下跌至16℃，周日更是低至13℃。记者了解到，北京常年的入冬日是10月31日，今年由于天气显著偏暖，预计入冬的脚步将推迟到11月6日。（记者 骆倩雯）\\n\\n【纠错】;)  【责任编辑:韩磊】\\n\\n阅读下一篇：\\n\\n专 题\\n\\n2023北京文化论坛\\n\\n中国国际服务贸易交易会\\n\\n2023中关村论坛\\n\\n2023北京两会\\n\\n视 频\\n\\nCopyright © 2000 - 2025 XINHUANET.com\\u3000All Rights Reserved.\\n\\n制作单位：新华网股份有限公司\\u3000\\u3000版权所有：新华网股份有限公司', 'score': 0.5798055}]\u001B[0m\u001B[32;1m\u001B[1;3m我已经找到今天北京的天气情况。  \n",
      "Action: Search  \n",
      "Action Input: '北京天气 2023年10月5日'  \u001B[0m\u001B[36;1m\u001B[1;3m[{'title': '北京历史天气预报2023年10月份', 'url': 'https://www.tianqihoubao.com/lishi/beijing/month/202310.html', 'content': '| 日期 | 天气状况(白天/夜间) | 最高/最低气温 | 风力风向(白天/夜间) |\\n ---  --- |\\n| 2023年10月01日 | 晴 / 晴 | 26℃ / 12℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月02日 | 多云 / 多云 | 25℃ / 14℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月03日 | 多云 / 多云 | 25℃ / 15℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月04日 | 晴 / 晴 | 24℃ / 9℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月05日 | 多云 / 多云 | 22℃ / 12℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月06日 | 多云 / 多云 | 22℃ / 12℃ | 北风 1-3级 / 北风 1-3级 |\\n| 2023年10月07日 | 多云 / 小雨 | 22℃ / 11℃ | 北风 1-3级 / 北风 1-3级 | [...] 前一月 后一月 北京历史天气 北京10月份天气统计信息  \\n 搜索\"城市名+天气后报\"访问本站（北京天气后报）导出Excel\\n\\n### 天气状况统计\\n\\n2023年10月份北京北京天气状况统计图\\n白天天气\\n夜间天气\\n全天综合\\n\\n## 其他月份\\n\\n### 风力分布分析\\n\\n2023年10月份北京风力等级和风向分布情况图 \\n白天风力风向\\n夜间风力风向\\n全天综合\\n\\n### 关于天气后报\\n\\n天气后报提供全国34个省市所属的3146个地区的历史天气预报查询，数据来源于城市当天的天气预报信息，可以查询到历史天气气温，历史风向，历史风力等历史天气状况。\\n\\n### 快速链接\\n\\n### 联系我们\\n\\n关于我们 | 免责声明 | QQ : 1968509554 |\\n\\n版权所有 © 2012-2025 天气后报 [...] # 北京历史天气预报 2023年10月份\\n\\n### 温度趋势分析\\n\\n2023年10月份北京市每日最高气温和最低气温变化趋势图', 'score': 0.81133276}, {'title': '北京市2023年的天氣歷史中國', 'url': 'https://tw.weatherspark.com/h/y/131055/2023/%E5%8C%97%E4%BA%AC%E5%B8%82%E3%80%81%E4%B8%AD%E5%9C%8B2023%E5%B9%B4%E6%AD%B7%E5%8F%B2%E5%A4%A9%E6%B0%A3', 'content': '0 公里/小時 無風   2 公里/小時 軟風   6 公里/小時 輕風   13 公里/小時 微風   21 公里/小時 和風   29 公里/小時 清風   40 公里/小時 強風   50 公里/小時 疾風   63 公里/小時 大風   76 公里/小時 烈風   89 公里/小時 風暴   103 公里/小時 暴風   117 公里/小時 颶風級  按蒲福氏風級進行色彩編碼成帶的每小時報告風速。 陰影叠加表示夜晚和民用曙暮光。  北京市 2023年 每小時風向 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    無風北東南西  按羅盤方位點進行色彩編碼的每小時報告風速。 陰影叠加表示夜晚和民用曙暮光。  北京市 2023年 氣壓 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    按照例如 METAR 報告中的高度計設定測量的每日氣壓（灰色長條）。 資料來源 [...] | 北京市2023年的天氣歷史 中國 此報告的資料來自北京首都国际机场。 檢視所有附近的氣象站  此報告顯示了北京市的過去天氣，並提供了2023年的天氣歷史。 它突出了我們的所有可用歷史天氣資料系列，包含北京市2023年的溫度歷史。 您可以透過點選圖表，從年份進一步檢視特定月份，甚至特定的一天的報告。  北京市2023年的溫度歷史 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    每日報告溫度範圍（灰色長條）和 24 小時高溫（紅色刻點）和低溫（藍色刻點），置於日均高溫（淺紅線）和低溫（淺藍線）上方，有 25%-75% 和 10%-90% 百分位帶。  北京市 2023年 每小時溫度 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    嚴寒   -9°C 極冷   0°C 寒冷   7°C 冷   13°C 涼爽   18°C 舒適   24°C 溫暖   29°C 熱   35°C 酷熱 [...] 每小時報告的溫度，以色彩編碼成帶。 陰影叠加表示夜晚和民用曙暮光。  © OpenStreetMap contributors  將北京市與另一個城市相比較：  北京市 2023年 雲量 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    0% 晴   20% 晴時多雲   40% 多雲   60% 多雲時陰   80% 陰天   100%  無顯著性云未偵測到雲雲幕及能見度良好  每小時報告的雲量，按天空的雲覆蓋百分比分類。    北京市 2023年 觀測天氣 連結  下載  比較  平均值  歷史：2025年2024年2023年2022年2021年2020年2019年2018年2017年    霧霾毛毛雨小雨中雨大雨凍雨霰雪粒微雪中雪大雪雹雷雨  按類別進行色彩編碼的每小時觀測天氣（按嚴重程度排序）。 若有多項報告則顯示最嚴重的代碼。  北京市 2023年 的日照和曙暮光小時數 連結  下載  比較  平均值', 'score': 0.60358196}, {'title': '北京2023年10月下旬气温比历史同期偏高3.4', 'url': 'http://www.bj.news.cn/20231102/bfb58c5e807a45d98e92bd1c3adfb5cf/c.html', 'content': '进入11月以后，影响我国的冷空气将会日渐频繁，而冷空气已经在路上，冷暖大反转即将上演。未来一周，将有两股冷空气轮番来袭，我国大部将开启“换季式”降温。\\n\\n\\u2003\\u2003从本周五开始，北京气温将逐渐下滑。今天的最高气温预计22℃，周五就将下跌至16℃，周日更是低至13℃。记者了解到，北京常年的入冬日是10月31日，今年由于天气显著偏暖，预计入冬的脚步将推迟到11月6日。（记者 骆倩雯）\\n\\n【纠错】;)  【责任编辑:韩磊】\\n\\n阅读下一篇：\\n\\n专 题\\n\\n2023北京文化论坛\\n\\n中国国际服务贸易交易会\\n\\n2023中关村论坛\\n\\n2023北京两会\\n\\n视 频\\n\\nCopyright © 2000 - 2025 XINHUANET.com\\u3000All Rights Reserved.\\n\\n制作单位：新华网股份有限公司\\u3000\\u3000版权所有：新华网股份有限公司', 'score': 0.5849357}]\u001B[0m\u001B[32;1m\u001B[1;3m我已经找到今天北京的天气情况。  \n",
      "今天（2023年10月5日）北京的天气为多云，白天最高气温为22℃，夜间最低气温为12℃，风力为北风1-3级。  \n",
      "\n",
      "Final Answer: 今天（2023年10月5日）北京的天气为多云，白天最高气温22℃，夜间最低气温12℃，风力为北风1-3级。\u001B[0m\n",
      "\n",
      "\u001B[1m> Finished chain.\u001B[0m\n",
      "{'input': '查询今天北京的天气情况', 'output': '今天（2023年10月5日）北京的天气为多云，白天最高气温22℃，夜间最低气温12℃，风力为北风1-3级。'}\n"
     ]
    }
   ],
   "execution_count": 5
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "上述的举例1也可以改写为：",
   "id": "d1077e46beedc25d"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-30T07:58:20.937354Z",
     "start_time": "2025-09-30T07:58:14.558840Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "from langchain import hub\n",
    "from langchain.agents import create_react_agent\n",
    "from langchain_core.prompts import ChatPromptTemplate\n",
    "# 获取Tavily搜索的实例\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain.agents import initialize_agent, AgentType, create_tool_calling_agent, AgentExecutor\n",
    "from langchain.tools import Tool\n",
    "import os\n",
    "import dotenv\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain_community.tools.tavily_search import TavilySearchResults\n",
    "dotenv.load_dotenv()\n",
    "\n",
    "# 读取配置文件的信息\n",
    "os.environ['TAVILY_API_KEY'] = \"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\"\n",
    "\n",
    "# 获取Tavily搜索工具的实例\n",
    "search = TavilySearchResults(max_results=3)\n",
    "\n",
    "# 获取一个搜索的工具\n",
    "# 使用Tool\n",
    "search_tool = Tool(\n",
    "    func=search.run,\n",
    "    name=\"Search\",\n",
    "    description=\"用于检索互联网上的信息\",\n",
    ")\n",
    "\n",
    "\n",
    "# 获取大语言模型\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY1\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "llm = ChatOpenAI(\n",
    "    model=\"gpt-4o-mini\",\n",
    "    temperature=0,\n",
    ")\n",
    "# 使用LangChain Hub中的官方ReAct提示模板\n",
    "prompt_template = hub.pull(\"hwchase17/react\")\n",
    "\n",
    "\n",
    "# 获取Agent的实例：create_react_agent()\n",
    "agent = create_react_agent(\n",
    "    llm=llm,\n",
    "    prompt=prompt_template,\n",
    "    tools=[search_tool]\n",
    ")\n",
    "\n",
    "# 获取AgentExecutor的实例\n",
    "agent_executor = AgentExecutor(\n",
    "    agent=agent,\n",
    "    tools=[search_tool],\n",
    "    verbose=True,\n",
    ")\n",
    "\n",
    "\n",
    "# 通过AgentExecutor的实例调用invoke(),得到响应\n",
    "result = agent_executor.invoke({\"input\":\"查询今天北京的天气情况\"})\n",
    "\n",
    "# 处理响应\n",
    "print(result)"
   ],
   "id": "e4c0ee2fd2900855",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n",
      "\u001B[32;1m\u001B[1;3m我需要查找今天北京的天气情况。  \n",
      "Action: Search  \n",
      "Action Input: '北京天气预报'  \u001B[0m\u001B[36;1m\u001B[1;3m[{'title': '中国气象局-天气预报-城市预报- 北京', 'url': 'https://weather.cma.cn/web/weather/', 'content': '|  |  |  |  |  |  |  |  |  |\\n ---  ---  ---  --- \\n| 时间 | 08:00 | 11:00 | 14:00 | 17:00 | 20:00 | 23:00 | 02:00 | 05:00 |\\n| 天气 |  |  |  |  |  |  |  |  |\\n| 气温 | 25.9℃ | 27.7℃ | 30.8℃ | 29.4℃ | 27.4℃ | 26℃ | 24.2℃ | 25.4℃ |\\n| 降水 | 无降水 | 2.3mm | 2.3mm | 2.3mm | 2.3mm | 无降水 | 无降水 | 1.9mm |\\n| 风速 | 3.2m/s | 3.2m/s | 3.3m/s | 2.5m/s | 2.6m/s | 2.6m/s | 2.4m/s | 2.8m/s |\\n| 风向 | 西南风 | 西南风 | 西南风 | 西南风 | 西南风 | 西南风 | 西南风 | 东南风 | [...] |  |  |  |  |  |  |  |  |  |\\n ---  ---  ---  --- \\n| 时间 | 08:00 | 11:00 | 14:00 | 17:00 | 20:00 | 23:00 | 02:00 | 05:00 |\\n| 天气 |  |  |  |  |  |  |  |  |\\n| 气温 | 26.9℃ | 28.7℃ | 29.8℃ | 27.7℃ | 27.3℃ | 26.1℃ | 25.9℃ | 25.3℃ |\\n| 降水 | 0.2mm | 0.3mm | 2.1mm | 无降水 | 无降水 | 1.3mm | 无降水 | 4.7mm |\\n| 风速 | 3.3m/s | 2.4m/s | 3.1m/s | 3.3m/s | 2.3m/s | 2.4m/s | 2.3m/s | 2.5m/s |\\n| 风向 | 东南风 | 东南风 | 东南风 | 东南风 | 东南风 | 东南风 | 西南风 | 西南风 | [...] |  |  |  |  |  |  |  |  |  |\\n ---  ---  ---  --- \\n| 时间 | 11:00 | 14:00 | 17:00 | 20:00 | 23:00 | 02:00 | 05:00 | 08:00 |\\n| 天气 |  |  |  |  |  |  |  |  |\\n| 气温 | 24.2℃ | 28.3℃ | 28.8℃ | 26.1℃ | 23.8℃ | 23.4℃ | 22.2℃ | 25.3℃ |\\n| 降水 | 2.3mm | 2.3mm | 2.3mm | 2.3mm | 0.9mm | 无降水 | 0.7mm | 无降水 |\\n| 风速 | 3.1m/s | 3.3m/s | 3.3m/s | 2.6m/s | 2.8m/s | 3m/s | 3.3m/s | 3.3m/s |\\n| 风向 | 东北风 | 西南风 | 东南风 | 西南风 | 西南风 | 东南风 | 东北风 | 东南风 |', 'score': 0.7498395}, {'title': '北京-天气预报 - 中央气象台', 'url': 'https://www.nmc.cn/publish/forecast/ABJ/beijing.html', 'content': '+ 全球天气公报\\n  + 全球热带气旋监测公报\\n  + WMO第XI海区海事天气公报\\n  + 全球灾害性天气监测月报\\n  + 全球雨雪落区预报\\n  + 世界气象中心（北京）门户网\\n  + 一带一路气象服务\\n  + 亚洲沙尘暴预报专业气象中心\\n 环境气象\\n\\n  + 雾预报\\n  + 霾预报\\n  + 沙尘天气预报\\n  + 空气污染气象条件预报\\n  + 环境气象公报\\n  + 大气环境气象公报\\n 农业气象\\n\\n  + 土壤水分监测\\n  + 农业干旱综合监测\\n  + 关键农时农事\\n  + 农业气象周报\\n  + 农业气象月报\\n  + 生态气象监测评估\\n  + 农业气象专报\\n  + 作物发育期监测\\n  + 农业气象灾害风险预警\\n  + 国外农业气象月报\\n 数值预报\\n\\n  + CMA全球天气模式\\n  + CMA全球集合模式\\n  + CMA区域模式\\n  + CMA区域集合模式\\n  + CMA台风模式\\n  + 海浪模式\\n\\n1. 当前位置：首页\\n2. 北京市\\n3. 北京天气预报\\n\\n省份：城市：\\n\\n日出\\n\\n北京\\n\\n日落\\n\\n降水量\\n\\n相对湿度\\n\\n体感温度\\n\\n雷达图 [...] 80.9%\\n\\n80%\\n\\n08:00\\n\\n-\\n\\n18.7℃\\n\\n3.3m/s\\n\\n西北风\\n\\n1011.1hPa\\n\\n76%\\n\\n80%\\n\\n11:00\\n\\n-\\n\\n23.8℃\\n\\n3m/s\\n\\n西北风\\n\\n1009.5hPa\\n\\n55.5%\\n\\n10.1%\\n\\n14:00\\n\\n-\\n\\n26.8℃\\n\\n3.3m/s\\n\\n西北风\\n\\n1007.8hPa\\n\\n48.2%\\n\\n10.1%\\n\\n17:00\\n\\n-\\n\\n25.4℃\\n\\n2.8m/s\\n\\n西南风\\n\\n1007.8hPa\\n\\n43.8%\\n\\n24.7%\\n\\n20:00\\n\\n-\\n\\n21.5℃\\n\\n2.4m/s\\n\\n西南风\\n\\n1007.8hPa\\n\\n35.9%\\n\\n45.2%\\n\\n23:00\\n\\n-\\n\\n16.2℃\\n\\n2.2m/s\\n\\n西南风\\n\\n1008.3hPa\\n\\n91%\\n\\n23.5%\\n\\n01日02:00\\n\\n-\\n\\n15.2℃\\n\\n1.9m/s\\n\\n西风\\n\\n1008.8hPa\\n\\n86.7%\\n\\n10.1%\\n\\n05:00\\n\\n-\\n\\n16℃\\n\\n2.2m/s\\n\\n西北风\\n\\n1009.9hPa\\n\\n80%\\n\\n10.1%\\n\\n08:00\\n\\n-\\n\\n19.8℃\\n\\n3.3m/s\\n\\n北风\\n\\n10.1%\\n\\n11:00\\n\\n-\\n\\n北风\\n\\n10% [...] 1021.5hPa\\n\\n42.2%\\n\\n78.6%\\n\\n23:00\\n\\n2.3mm\\n\\n20.4℃\\n\\n2.4m/s\\n\\n西南风\\n\\n1021.1hPa\\n\\n87.3%\\n\\n70%\\n\\n27日02:00\\n\\n2.3mm\\n\\n19.7℃\\n\\n2.4m/s\\n\\n西南风\\n\\n1020.6hPa\\n\\n86.4%\\n\\n75.1%\\n\\n05:00\\n\\n2.3mm\\n\\n19.1℃\\n\\n2.4m/s\\n\\n西南风\\n\\n1020.3hPa\\n\\n85.9%\\n\\n100%\\n\\n08:00\\n\\n2.3mm\\n\\n20.4℃\\n\\n3.3m/s\\n\\n东风\\n\\n1021.2hPa\\n\\n85.3%\\n\\n97.7%\\n\\n11:00\\n\\n0.3mm\\n\\n23.8℃\\n\\n2.7m/s\\n\\n南风\\n\\n1020.8hPa\\n\\n72.9%\\n\\n86.6%\\n\\n14:00\\n\\n1mm\\n\\n23.6℃\\n\\n3.3m/s\\n\\n南风\\n\\n1019.1hPa\\n\\n69.5%\\n\\n71.7%\\n\\n17:00\\n\\n0.8mm\\n\\n23.6℃\\n\\n2.4m/s\\n\\n南风\\n\\n1018hPa\\n\\n65.8%\\n\\n80.4%\\n\\n20:00\\n\\n0.3mm\\n\\n18.2℃\\n\\n2.5m/s\\n\\n南风\\n\\n1017.9hPa\\n\\n62.1%\\n\\n74.7%\\n\\n23:00\\n\\n-', 'score': 0.72675586}, {'title': '北京, 北京市, 中國每日天氣 - AccuWeather', 'url': 'https://www.accuweather.com/zh/cn/beijing/101924/daily-weather-forecast/101924', 'content': 'RealFeel®86°\\n\\nRealFeel Shade™81°\\n\\n最大紫外線指數4.0 (溫和)\\n\\n風西南偏西 6英里/小时\\n\\n## 周二 9/30\\n\\n85° /58°\\n\\n1%\\n\\n晴有薄霧\\n\\nRealFeel®87°\\n\\nRealFeel Shade™83°\\n\\n最大紫外線指數5.0 (溫和)\\n\\n風西 5英里/小时\\n\\n## 周三 10/1\\n\\n86° /60°\\n\\n0%\\n\\n高雲間晴\\n\\nRealFeel®86°\\n\\nRealFeel Shade™84°\\n\\n最大紫外線指數2.0 (良好)\\n\\n風東北偏東 5英里/小时\\n\\n## 周四 10/2\\n\\n82° /56°\\n\\n1%\\n\\n晴有薄霧\\n\\nRealFeel®84°\\n\\nRealFeel Shade™80°\\n\\n最大紫外線指數4.0 (溫和)\\n\\n風西南 4英里/小时\\n\\n## 周五 10/3\\n\\n80° /55°\\n\\n1%\\n\\n高雲間晴\\n\\nRealFeel®80°\\n\\nRealFeel Shade™77°\\n\\n最大紫外線指數2.0 (良好)\\n\\n風東南偏南 4英里/小时\\n\\n## 周六 10/4\\n\\n81° /59°\\n\\n3%\\n\\n大致晴朗\\n\\nRealFeel®84° [...] RealFeel Shade™62°\\n\\n最大紫外線指數1.0 (良好)\\n\\n風北 6英里/小时\\n\\n## 周一 10/20\\n\\n64° /50°\\n\\n25%\\n\\n多雲\\n\\nRealFeel®66°\\n\\nRealFeel Shade™66°\\n\\n最大紫外線指數1.0 (良好)\\n\\n風東北偏東 1英里/小时\\n\\n## 周二 10/21\\n\\n64° /43°\\n\\n20%\\n\\n大致晴朗\\n\\nRealFeel®65°\\n\\nRealFeel Shade™62°\\n\\n最大紫外線指數4.0 (溫和)\\n\\n風西北偏北 7英里/小时\\n\\n## 周三 10/22\\n\\n61° /40°\\n\\n5%\\n\\n陽光明媚\\n\\nRealFeel®66°\\n\\nRealFeel Shade™62°\\n\\n最大紫外線指數3.0 (溫和)\\n\\n風西北偏北 2英里/小时\\n\\n## 周四 10/23\\n\\n60° /39°\\n\\n20%\\n\\n陽光明媚\\n\\nRealFeel®64°\\n\\nRealFeel Shade™59°\\n\\n最大紫外線指數3.0 (溫和)\\n\\n風西北偏西 4英里/小时\\n\\n## 周五 10/24\\n\\n62° /40°\\n\\n5%\\n\\n陽光充足\\n\\nRealFeel®67° [...] RealFeel Shade™52°\\n\\n最大紫外線指數2.0 (良好)\\n\\n風東北偏北 5英里/小时\\n\\n## 周二 11/4\\n\\n51° /33°\\n\\n20%\\n\\n大致晴朗\\n\\nRealFeel®55°\\n\\nRealFeel Shade™53°\\n\\n最大紫外線指數3.0 (溫和)\\n\\n風西北偏北 4英里/小时\\n\\n## 周三 11/5\\n\\n52° /34°\\n\\n5%\\n\\n陽光充足\\n\\nRealFeel®57°\\n\\nRealFeel Shade™53°\\n\\n最大紫外線指數3.0 (溫和)\\n\\n風東北偏東 2英里/小时\\n\\n## 周四 11/6\\n\\n54° /40°\\n\\n少量降雨\\n\\nRealFeel®56°\\n\\nRealFeel Shade™56°\\n\\n最大紫外線指數1.0 (良好)\\n\\n風北 2英里/小时\\n\\n## 周五 11/7\\n\\n50° /31°\\n\\n1%\\n\\n多雲間晴\\n\\nRealFeel®52°\\n\\nRealFeel Shade™49°\\n\\n最大紫外線指數3.0 (溫和)\\n\\n風東 5英里/小时\\n\\n## 周六 11/8\\n\\n49° /33°\\n\\n25%\\n\\n大致多雲\\n\\nRealFeel®52°\\n\\nRealFeel Shade™51°', 'score': 0.6172364}]\u001B[0m\u001B[32;1m\u001B[1;3m我现在知道了今天北京的天气情况。  \n",
      "根据最新的天气预报，北京今天的天气如下：\n",
      "\n",
      "- **时间段**: 08:00 - 23:00\n",
      "- **天气**: 多云\n",
      "- **气温**: \n",
      "  - 08:00: 25.9℃\n",
      "  - 11:00: 27.7℃\n",
      "  - 14:00: 30.8℃\n",
      "  - 17:00: 29.4℃\n",
      "  - 20:00: 27.4℃\n",
      "  - 23:00: 26℃\n",
      "- **降水**: \n",
      "  - 08:00: 无降水\n",
      "  - 11:00: 2.3mm\n",
      "  - 14:00: 2.3mm\n",
      "  - 17:00: 2.3mm\n",
      "  - 20:00: 2.3mm\n",
      "  - 23:00: 无降水\n",
      "- **风速**: \n",
      "  - 08:00: 3.2m/s\n",
      "  - 11:00: 3.2m/s\n",
      "  - 14:00: 3.3m/s\n",
      "  - 17:00: 2.5m/s\n",
      "  - 20:00: 2.6m/s\n",
      "  - 23:00: 2.6m/s\n",
      "- **风向**: 西南风\n",
      "\n",
      "总体来看，今天的天气较为温暖，但有降水的可能，尤其是在中午和下午时段。请根据天气情况适当调整出行计划。\n",
      "\n",
      "Final Answer: 今天北京的天气为多云，气温在25.9℃到30.8℃之间，降水量在中午和下午有2.3mm的可能，风速在2.5m/s到3.3m/s之间，主要为西南风。\u001B[0m\n",
      "\n",
      "\u001B[1m> Finished chain.\u001B[0m\n",
      "{'input': '查询今天北京的天气情况', 'output': '今天北京的天气为多云，气温在25.9℃到30.8℃之间，降水量在中午和下午有2.3mm的可能，风速在2.5m/s到3.3m/s之间，主要为西南风。'}\n"
     ]
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "举例2：使用ChatPromptTemplate实现",
   "id": "b1318f1381bb5095"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-30T08:14:55.357637Z",
     "start_time": "2025-09-30T08:14:49.160564Z"
    }
   },
   "cell_type": "code",
   "source": [
    "\n",
    "from langchain.agents import create_react_agent\n",
    "from langchain_core.prompts import ChatPromptTemplate\n",
    "# 获取Tavily搜索的实例\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain.agents import initialize_agent, AgentType, create_tool_calling_agent, AgentExecutor\n",
    "from langchain.tools import Tool\n",
    "import os\n",
    "import dotenv\n",
    "from langchain_openai import ChatOpenAI\n",
    "from langchain_community.tools.tavily_search import TavilySearchResults\n",
    "dotenv.load_dotenv()\n",
    "\n",
    "# 读取配置文件的信息\n",
    "os.environ['TAVILY_API_KEY'] = \"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\"\n",
    "\n",
    "# 获取Tavily搜索工具的实例\n",
    "search = TavilySearchResults(max_results=3)\n",
    "\n",
    "# 获取一个搜索的工具\n",
    "# 使用Tool\n",
    "search_tool = Tool(\n",
    "    func=search.run,\n",
    "    name=\"Search\",\n",
    "    description=\"用于检索互联网上的信息\",\n",
    ")\n",
    "\n",
    "\n",
    "# 获取大语言模型\n",
    "os.environ['OPENAI_API_KEY'] = os.getenv(\"OPENAI_API_KEY1\")\n",
    "os.environ['OPENAI_BASE_URL'] = os.getenv(\"OPENAI_BASE_URL\")\n",
    "llm = ChatOpenAI(\n",
    "    model=\"gpt-4o-mini\",\n",
    "    temperature=0,\n",
    ")\n",
    "# 提供提示词模板（以ChatPromptTemplate为例）\n",
    "system_template = \"\"\"\n",
    "Answer the following questions as best you can. You have access to the following tools:\n",
    "\n",
    "{tools}\n",
    "\n",
    "Use the following format:\n",
    "\n",
    "Question: the input question you must answer\n",
    "Thought: you should always think about what to do\n",
    "Action: the action to take, should be one of [{tool_names}]\n",
    "Action Input: the input to the action\n",
    "Observation: the result of the action\n",
    "... (this Thought/Action/Action Input/Observation can repeat N times)\n",
    "Thought: I now know the final answer\n",
    "Final Answer: the final answer to the original input question\n",
    "\n",
    "Begin!\"\"\"\n",
    "\n",
    "prompt_template = ChatPromptTemplate.from_messages([\n",
    "    (\"system\",system_template),\n",
    "    (\"human\",\"{input}\"),\n",
    "    (\"system\",\"{agent_scratchpad}\"),\n",
    "])\n",
    "\n",
    "# 获取Agent的实例：create_react_agent()\n",
    "agent = create_react_agent(\n",
    "    llm=llm,\n",
    "    prompt=prompt_template,\n",
    "    tools=[search_tool]\n",
    ")\n",
    "\n",
    "# 获取AgentExecutor的实例\n",
    "agent_executor = AgentExecutor(\n",
    "    agent=agent,\n",
    "    tools=[search_tool],\n",
    "    verbose=True,\n",
    "\n",
    ")\n",
    "\n",
    "\n",
    "# 通过AgentExecutor的实例调用invoke(),得到响应\n",
    "result = agent_executor.invoke({\"input\":\"查询今天北京的天气情况\"})\n",
    "\n",
    "# 处理响应\n",
    "print(result)"
   ],
   "id": "8e593f2707d67508",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\n",
      "\u001B[1m> Entering new AgentExecutor chain...\u001B[0m\n",
      "\u001B[32;1m\u001B[1;3mQuestion: 查询今天北京的天气情况\n",
      "Thought: 我需要查找今天北京的天气信息。\n",
      "Action: Search\n",
      "Action Input: \"北京天气 2023年10月25日\"\u001B[0m\u001B[36;1m\u001B[1;3m[{'title': '天气预报（2023年10月25日08时发布）', 'url': 'https://www.bjfsh.gov.cn/bsfw2/tdrqfw/cjr/tqybl/202310/t20231025_40067701_fs.shtml', 'content': '区人大  | 区政府  | 区政协\\n\\n无障碍 长者专区\\n\\n# 天气预报（2023年10月25日08时发布）\\n\\n来源：区气象局 发布日期：2023-10-25\\n\\n今天白天：\\n\\n晴间多云，早晨有轻雾；\\n\\n北转南风2、3级；\\n\\n最高气温：24℃。\\n\\n今天夜间：\\n\\n晴；\\n\\n南转北风3级左右；\\n\\n最低气温：10℃。\\n\\n空气污染气象条件预报：今天白天空气污染气象条件等级为4级，不利于空气污染物的扩散；今天夜间空气污染气象条件等级为3级，扩散条件一般。\\n\\n版权所有：北京市房山区人民政府  网站地图\\n\\n主办:北京市房山区人民政府办公室  承办：北京市房山区政务服务管理局\\n\\n联系地址：北京市房山区长阳镇昊天北大街38号CSD  联系邮箱：webmaster@bjfsh.gov.cn\\n\\n网站标识码：1101110035  京ICP备05007183号  京公网安备11011102001158', 'score': 0.9483129}, {'title': '北京历史天气预报2023年10月份', 'url': 'https://www.tianqihoubao.com/lishi/beijing/month/202310.html', 'content': '| 2023年10月24日 | 晴 / 晴 | 23℃ / 9℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月25日 | 晴 / 晴 | 25℃ / 10℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月26日 | 晴 / 晴 | 21℃ / 6℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月27日 | 晴 / 晴 | 23℃ / 7℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月28日 | 晴 / 晴 | 23℃ / 9℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月29日 | 晴 / 晴 | 19℃ / 11℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月30日 | 雾 / 多云 | 22℃ / 11℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |\\n| 2023年10月31日 | 晴 / 雾 | 22℃ / 12℃ | 无持续风向 1-3级 / 无持续风向 1-3级 |', 'score': 0.9071234}, {'title': '北京新闻早报| 2023年10月25日 - QQ.com', 'url': 'https://news.qq.com/rain/a/20231025A00VBM00', 'content': 'ç½\\x91ä¸\\x8aæ\\x8f\\x90äº¤æ\\x8a¥å\\x90\\x8dç\\x94³è¯·ç\\x9a\\x84æ\\x97¶é\\x97´ä¸º2023å¹´10æ\\x9c\\x8825æ\\x97¥9æ\\x97¶è\\x87³28æ\\x97¥17æ\\x97¶ï¼\\x88è¿\\x9bå\\x9f\\x8eå\\x8a¡å·¥äººå\\x91\\x98é\\x9a\\x8fè¿\\x81å\\xad\\x90å¥³æ\\x8f\\x90äº¤æ\\x8a¥å\\x90\\x8dç\\x94³è¯·ç\\x9a\\x84æ\\x97¶é\\x97´ä¸º2023å¹´10æ\\x9c\\x8810æ\\x97¥9æ\\x97¶è\\x87³11æ\\x97¥17æ\\x97¶ï¼\\x89ï¼\\x9bé\\x80\\x9aè¿\\x87æ\\x8a¥å\\x90\\x8dèµ\\x84æ ¼å\\x88\\x9då®¡ç\\x9a\\x84è\\x80\\x83ç\\x94\\x9fç½\\x91ä¸\\x8aå¡«æ\\x8a¥ä¸ªäººä¿¡æ\\x81¯å¹¶ç¼´è´¹ç\\x9a\\x84æ\\x97¶é\\x97´ä¸º2023å¹´11æ\\x9c\\x881æ\\x97¥9æ\\x97¶è\\x87³4æ\\x97¥17æ\\x97¶ï¼\\x9bæ\\x8a¥å\\x90\\x8dèµ\\x84æ ¼ç\\x8e°å\\x9cºç¡®è®¤ç\\x9a\\x84æ\\x97¶é\\x97´ç\\x94±å\\x90\\x84å\\x8cºé«\\x98æ ¡æ\\x8b\\x9bç\\x94\\x9få\\x8a\\x9eå\\x85¬å®¤å\\x9c¨11æ\\x9c\\x8811æ\\x97¥å\\x89\\x8dè\\x87ªè¡\\x8cå®\\x89æ\\x8e\\x92ï¼\\x8cè\\x80\\x83ç\\x94\\x9få\\x9c¨å®\\x8cæ\\x88\\x90ç½\\x91ä¸\\x8aå¡«æ\\x8a¥ä¸ªäººä¿¡æ\\x81¯å\\x92\\x8cç¼´è´¹æ\\x97¶è¦\\x81æ³¨æ\\x84\\x8fç½\\x91ä¸\\x8aé\\x80\\x9aç\\x9f¥ç\\x9a\\x84æ\\x8a¥å\\x90\\x8dèµ\\x84æ [...] \\x96¶ äº¬æ´¥å\\x86\\x80234é¡¹æ\\x94¿å\\x8a¡æ\\x9c\\x8då\\x8a¡\\x80\\x9cè·¨ç\\x9c\\x81é\\x80\\x9aå\\x8a\\x9e\\x80\\x9dï¼\\x8c179é¡¹\\x80\\x9cå\\x90\\x8cäº\\x8bå\\x90\\x8cæ \\x87\\x80\\x9d\\n\\n10æ\\x9c\\x8824æ\\x97¥ä¸¾è¡\\x8cç\\x9a\\x84äº¬æ´¥å\\x86\\x80è\\x90¥å\\x95\\x86ç\\x8e¯å¢\\x83æ\\x94¹é\\x9d©æ\\x88\\x90æ\\x95\\x88æ\\x96°é\\x97»å\\x8f\\x91å¸\\x83ä¼\\x9aä¸\\x8aï¼\\x8cå\\x8c\\x97äº¬å¸\\x82å\\x8f\\x91æ\\x94¹å§\\x94è\\x90¥å\\x95\\x86ç\\x8e¯å¢\\x83æ\\x94¿ç\\xad\\x96å¤\\x84å¤\\x84é\\x95¿å¼ è\\x85¾å¯¹å¤\\x96ä»\\x8bç»\\x8dï¼\\x8cäº¬æ´¥å\\x86\\x80ä¸\\x89å\\x9c°å·²æ\\x8e¨å\\x8a¨179é¡¹æ\\x94¿å\\x8a¡æ\\x9c\\x8då\\x8a¡äº\\x8bé¡¹\\x80\\x9cå\\x90\\x8cäº\\x8bå\\x90\\x8cæ \\x87\\x80\\x9dï¼\\x8c234é¡¹å®\\x9eç\\x8e°\\x80\\x9cè·¨ç\\x9c\\x81é\\x80\\x9aå\\x8a\\x9e\\x80\\x9dï¼\\x8c200ä½\\x99é¡¹\\x80\\x9cäº¬æ´¥å\\x86\\x80+é\\x9b\\x84å®\\x89\\x80\\x9dæ\\x94¿å\\x8a¡æ\\x9c\\x8då\\x8a¡äº\\x8bé¡¹å®\\x9eç\\x8e°\\x80\\x9cç§»å\\x8a¨å\\x8a\\x9e\\x80\\x9dã\\x80\\x82 [...] æ ¹æ\\x8d®å¾\\x80å¹´ç»\\x8féª\\x8cï¼\\x8c10æ\\x9c\\x8828æ\\x97¥ã\\x80\\x8129æ\\x97¥å\\x92\\x8c11æ\\x9c\\x884æ\\x97¥ã\\x80\\x815æ\\x97¥ï¼\\x8cæ\\x98¯æ¸¸å®¢è¾\\x83ä¸ºé\\x9b\\x86ä¸\\xadç\\x9a\\x84é\\x87\\x8dç\\x82¹æ\\x97¶æ®µï¼\\x8cå\\x85¬å\\x9b\\xadå»ºè®®æ¸¸å®¢å°½é\\x87\\x8fé\\x80\\x89æ\\x8b©å\\x91¨ä¸\\x80è\\x87³å\\x91¨å\\x9b\\x9bæ¸¸å\\x9b\\xadã\\x80\\x82æ¸¸å®¢å\\x8f¯æ\\x8f\\x90å\\x89\\x8dé\\x80\\x9aè¿\\x87å®\\x98æ\\x96¹å¾®ä¿¡å\\x85¬ä¼\\x97å\\x8f·è´\\xadç¥¨ï¼\\x8cä¹\\x9få\\x8f¯ä»¥ç\\x8e°å\\x9cºè´\\xadç¥¨å\\x85¥å\\x9b\\xadï¼\\x8cå\\x85¬å\\x9b\\xadå¹´ç¥¨å\\x8f¯æ\\xad£å¸¸ä½¿ç\\x94¨ã\\x80\\x82å¦\\x82æ\\x9e\\x9cå\\x8fªè\\x83½é\\x80\\x89æ\\x8b©å\\x91¨æ\\x9c«ï¼\\x8cä¹\\x9få»ºè®®å¤§å®¶é\\x94\\x99å¼\\x808æ\\x97¶è\\x87³15æ\\x97¶ç\\x9a\\x84ç\\x9b¸å¯¹é«\\x98å³°æ\\x97¶æ®µï¼\\x8cå¹¶å°½é\\x87\\x8fé\\x80\\x89æ\\x8b©ä¹\\x98å\\x9d\\x90å\\x85¬å\\x85±äº¤é\\x80\\x9aå\\x87ºè¡\\x8cã\\x80\\x82\\n\\n\\x96¶ 9å¹´å¢\\x9eå\\x80¼è¿\\x911950ä¸\\x87å\\x85\\x83ï¼\\x8cæ\\x9c\\x9dé\\x98³è¿\\x99ä¸ªå°\\x8få\\x8cºä¸ºç®¡ç\\x90\\x86ä¸\\x93ç»´èµ\\x84é\\x87\\x91æ\\x8f\\x90ä¾\\x9bè\\x8c\\x83æ\\x9c¬', 'score': 0.8889231}]\u001B[0m\u001B[32;1m\u001B[1;3m我现在知道今天北京的天气情况。  \n",
      "Final Answer: 今天北京的天气为晴间多云，早晨有轻雾，白天气温最高可达24℃，夜间最低气温为10℃。空气污染气象条件等级为4级，不利于空气污染物的扩散。\u001B[0m\n",
      "\n",
      "\u001B[1m> Finished chain.\u001B[0m\n",
      "{'input': '查询今天北京的天气情况', 'output': '今天北京的天气为晴间多云，早晨有轻雾，白天气温最高可达24℃，夜间最低气温为10℃。空气污染气象条件等级为4级，不利于空气污染物的扩散。'}\n"
     ]
    }
   ],
   "execution_count": 18
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "小结：\n",
    "\n",
    "1、传统方式，相较于通用方式来讲，不用提供提示词模板。\n",
    "\n",
    "2、对于通用方式来讲，\n",
    "\n",
    "FUNCTION_CALL模式：在创建Agent时，推荐大家使用ChatPromptTemplate\n",
    "\n",
    "ReAct模式：在创建Agent时，大家可以使用ChatPromptTemplate、PromptTemplate。但相较来讲，推荐大家使用PromptTemplate"
   ],
   "id": "584d4bfe821e6257"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
